package main

import (
	"fmt"
	"strings"
)

func main() {
	/*
		strings包 下的关于字符串的函数

			小技巧：按住 Ctrl键，点击函数名，就可以查看函数的实现代码

		len(str) : 求长度
		+ 或 fmt.Sprintf : 拼接字符串
		strings.Split : 分割
		strings.Contains : 判断是否包含
		strings.HasPrefix、strings.HasSuffix : 前缀、后缀判断
		strings.Index()、strings.LastIndex() : 子串出现的位置
		strings.Join(a []string, sep string) : join 操作
	*/
	s1 := "helloworld"
	//1.是否包含指定的内容 --> bool（返回值类型）
	fmt.Println(strings.Contains(s1, "h"))
	//2.是否包含 chars 中任意的一个字符 --> bool
	fmt.Println(strings.ContainsAny(s1, "abcd"))
	//3.统计 substr 在字符串中出现的次数 --> int
	fmt.Println(strings.Count(s1, "lloo"))

	//4.判断字符串是否以xxx前缀开头，以xxx后缀结尾 ——> bool
	s2 := "20230510课堂笔记.txt"
	if strings.HasPrefix(s2, "202305") {
		fmt.Println("23年5月的文件。。")
	}
	if strings.HasSuffix(s2, "txt") {
		fmt.Println("文本文档。。")
	}

	//6.索引
	//查找 substr 在 s 中第一次出现的位置，如果不存在就返回 -1
	fmt.Println(strings.Index(s1, "he"))
	//查找 chars 中任意的一个字符，第一次出现在 s 中的位置
	fmt.Println(strings.IndexAny(s1, "abcdl"))
	//查找 substr 在 s 中最后一次出现的位置
	fmt.Println(strings.LastIndex(s1, "llo"))

	//7.字符串的拼接
	//将 string 类型的切片中的元素，用指定的字符(第二个参数值)拼接在一起
	ss1 := []string{"abc", "world", "hello", "ruby"}
	s3 := strings.Join(ss1, "-~-")
	fmt.Println(s3) //abc-~-world-~-hello-~-ruby

	//8.字符串的切割
	//把一个字符串按照指定的字符切割成一个字符串切片
	s4 := "123,456,789,rfasda"
	ss2 := strings.Split(s4, ",")
	fmt.Println(ss2) //[123 456 789 rfasda]

	//9.重复，自己拼接自己 count 次
	s5 := strings.Repeat("喜羊羊真帅！", 5)
	fmt.Println(s5)

	//10.替换
	//将字符串中 n 个的 old 字符替换为 new 字符
	//若 n == -1，替换掉字符串中所有的 old
	//若 n > old 在字符串中的个数，替换所有的 old 即可
	//helloworld
	s6 := strings.Replace(s1, "l", "*", 1)
	fmt.Println(s6) //he*loworld 如果n>=3,则为he**owor*d

	//11.字母的大小写转换
	s7 := "Hello World 嘿嘿嘿***"
	//将字符串中所有的大写字母全部转为小写，其他字符不管
	fmt.Println(strings.ToLower(s7)) //hello world 嘿嘿嘿***
	//将字符串中所有的小写字母全部转为大写，其他字符不管
	fmt.Println(strings.ToUpper(s7)) //HELLO WORLD 嘿嘿嘿***

	//12.截取字符串：
	/*
		str[start:end] ——> substr
			包含start, 不包含 end 下标
	*/
	fmt.Println(s1) //helloworld
	s8 := s1[:5]
	fmt.Println(s8) //hello
	s9 := s1[5:]
	fmt.Println(s9) //world

	//13.Trim 用于删除字符串的前导和结尾空格。它还支持删除其他指定字符集的字符。
}
